﻿<UserControl x:Class="WPFSearchDataGrid"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:WPFSearchDataGrid="clr-namespace:WPFSearchDataGrid"
             xmlns:assets="clr-namespace:WPFSearchDataGrid.Assets" mc:Ignorable="d" 
             d:DesignHeight="51" d:DesignWidth="457">
    <UserControl.Resources>

        <assets:VisibilityConverter x:Key="VisibilityConverter"/>

        <DataGridTemplateColumn x:Key="TextBoxTemplate">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <!--<Border Padding="0">-->
                        <Label Padding="0" 
                               VerticalContentAlignment="Center"
                               Content="{Binding Path=Value}" IsTabStop="True" />
                    <!--</Border>-->
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <!--<Border Padding="0">-->
                        <TextBox Padding="0" 
                                 VerticalContentAlignment="Center" 
                                 Text="{Binding Path=Value}"/>
                    <!--</Border>-->
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn x:Key="CheckBoxTemplate">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <!--<Border Padding="0">-->
                        <CheckBox HorizontalAlignment="Center" 
                                  VerticalContentAlignment="Center" 
                                  VerticalAlignment="Center"
                                  IsChecked="{Binding Path=Value}"/>
                    <!--</Border>-->
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <Style x:Key="GlassButton" TargetType="{x:Type Button}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border x:Name="ButtonBorder" 
                                  CornerRadius="8" 
                                  BorderThickness="2" 
                                  Background="{TemplateBinding Property=Background}"
                                  BorderBrush="DarkGray"
                                  RenderTransformOrigin="0.5,0.5">
                            <Grid>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="*"/>
                                    <RowDefinition Height="1.7*"/>
                                </Grid.RowDefinitions>
                                <Border Grid.Row="0" CornerRadius="23,23,0,0">
                                    <Border.Background>
                                        <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
                                            <GradientStop Color="#08FFFFFF" Offset="0"/>
                                            <GradientStop Color="#88FFFFFF" Offset="1"/>
                                        </LinearGradientBrush>
                                    </Border.Background>
                                </Border>
                                <ContentPresenter x:Name="ButtonContentPresenter"
                                VerticalAlignment="Center"  
                                Grid.RowSpan="2" 
                                HorizontalAlignment="Center"/>
                            </Grid>
                        </Border>
                     </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

        <Style x:Key="{x:Type ContextMenu}" TargetType="{x:Type ContextMenu}">
            <Setter Property="OverridesDefaultStyle" Value="True"/>
            <Setter Property="SnapsToDevicePixels" Value="True"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ContextMenu}">
                        <Border Background="#CD222120" 
                                CornerRadius="7, 7, 8, 8" 
                                BorderBrush="DarkGray" 
                                BorderThickness="2" 
                                Opacity="0.96">
                            <StackPanel ClipToBounds="True" 
                                        Orientation="Vertical" 
                                        IsItemsHost="True" 
                                        Margin="5,4,5,4"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>


        <SolidColorBrush x:Key="StandardBorderBrush" Color="#888" />
        <SolidColorBrush x:Key="StandardBackgroundBrush" Color="#FFF" />
        <SolidColorBrush x:Key="HoverBorderBrush" Color="#DDD" />
        <SolidColorBrush x:Key="SelectedBackgroundBrush" Color="Gray" />
        <SolidColorBrush x:Key="SelectedForegroundBrush" Color="White" />
        <SolidColorBrush x:Key="DisabledForegroundBrush" Color="#888" />
        <!--<SolidColorBrush x:Key="NormalBrush" Color="#888" />-->
        <SolidColorBrush x:Key="NormalBrush" Color="Transparent" />
        <!--<SolidColorBrush x:Key="NormalBorderBrush" Color="#888" />-->
        <SolidColorBrush x:Key="NormalBorderBrush" Color="Transparent" />
        <SolidColorBrush x:Key="HorizontalNormalBrush" Color="#888" />
        <SolidColorBrush x:Key="HorizontalNormalBorderBrush" Color="#888" />
        <LinearGradientBrush x:Key="ListBoxBackgroundBrush" StartPoint="0,0" EndPoint="1,0.001">
                <GradientBrush.GradientStops>
                    <GradientStopCollection>
                        <GradientStop Color="White" Offset="0.0" />
                            <GradientStop Color="White" Offset="0.6" />
                            <GradientStop Color="#DDDDDD" Offset="1.2" />
                        </GradientStopCollection>
                </GradientBrush.GradientStops>
        </LinearGradientBrush>
        <LinearGradientBrush x:Key="StandardBrush" StartPoint="0,0" EndPoint="0,1">
                 <GradientBrush.GradientStops>
                    <GradientStopCollection>
                        <GradientStop Color="#FFF" Offset="0.0"/>
                        <GradientStop Color="#CCC" Offset="1.0"/>
                    </GradientStopCollection>
                </GradientBrush.GradientStops>
        </LinearGradientBrush>
        <SolidColorBrush x:Key="GlyphBrush" Color="#444" />
        <LinearGradientBrush x:Key="PressedBrush" StartPoint="0,0" EndPoint="0,1">
                <GradientBrush.GradientStops>
                    <GradientStopCollection>
                        <GradientStop Color="#BBB" Offset="0.0"/>
                        <GradientStop Color="#EEE" Offset="0.1"/>
                        <GradientStop Color="#EEE" Offset="0.9"/>
                        <GradientStop Color="#FFF" Offset="1.0"/>
                    </GradientStopCollection>
                </GradientBrush.GradientStops>
        </LinearGradientBrush>

        <!--ScrollViewer ScrollBar Repeat Buttons (at each end)-->                                 
        <Style x:Key="ScrollBarLineButton" TargetType="{x:Type RepeatButton}">
            <Setter Property="SnapsToDevicePixels" Value="True"/>
                <Setter Property="OverridesDefaultStyle" Value="true"/>
                <Setter Property="Focusable" Value="false"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type RepeatButton}">
                            <Border Name="Border"
                                      Margin="1"
                                      CornerRadius="2"
                                      Background="{StaticResource NormalBrush}"
                                      BorderBrush="{StaticResource NormalBorderBrush}"
                                      BorderThickness="1">
                                <Path HorizontalAlignment="Center"
                                        VerticalAlignment="Center"/>
                                        <!--Fill="{StaticResource GlyphBrush}"
                                        Data="{Binding Path=Content, RelativeSource={RelativeSource TemplatedParent}}"--> 
                            </Border>
                            <!--<ControlTemplate.Triggers>
                                <Trigger Property="IsPressed" Value="true">
                                    <Setter TargetName="Border" Property="Background" Value="{StaticResource PressedBrush}" />
                                </Trigger>
                                <Trigger Property="IsEnabled" Value="false">
                                    <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/>
                                </Trigger>
                            </ControlTemplate.Triggers>-->
                        </ControlTemplate>
                    </Setter.Value>
            </Setter>
        </Style>
        <!--SrollViewer ScrollBar Repeat Buttons (The part in the middle, not the thumb the long area between the buttons )-->
        <Style x:Key="ScrollBarPageButton" TargetType="{x:Type RepeatButton}">
            <Setter Property="SnapsToDevicePixels" Value="True"/>
            <Setter Property="OverridesDefaultStyle" Value="true"/>
            <Setter Property="IsTabStop" Value="false"/>
            <Setter Property="Focusable" Value="false"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type RepeatButton}">
                        <Border Background="Transparent"/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <!--ScrollViewer ScrollBar Thumb, that part that can be dragged up down or left right Buttons-->
        <Style x:Key="ScrollBarThumb" TargetType="{x:Type Thumb}">
            <Setter Property="SnapsToDevicePixels" Value="True"/>
            <Setter Property="OverridesDefaultStyle" Value="True"/>
            <Setter Property="IsTabStop" Value="false"/>
            <Setter Property="Focusable" Value="false"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Thumb}">
                        <!--<Border CornerRadius="2"
                                Background="{TemplateBinding Background}"
                                BorderBrush="{TemplateBinding BorderBrush}"
                                BorderThickness="1" />-->
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

        <ControlTemplate x:Key="VerticalScrollBar" TargetType="{x:Type ScrollBar}">
            <Grid >
                <Grid.RowDefinitions>
                    <RowDefinition MaxHeight="18"/>
                    <RowDefinition Height="0.00001*"/>
                    <RowDefinition MaxHeight="18"/>
                </Grid.RowDefinitions>
                <Border Grid.RowSpan="3"
                        CornerRadius="2"
                        Background="#F0F0F0" />
                    <RepeatButton Grid.Row="0"
                                  Style="{StaticResource ScrollBarLineButton}"
                                  Height="18"
                                  Command="ScrollBar.LineUpCommand"
                                  Content="M 0 4 L 8 4 L 4 0 Z" />
                        <Track Name="PART_Track"
                               Grid.Row="1"
                               IsDirectionReversed="True">
                            <Track.DecreaseRepeatButton>
                                <RepeatButton Style="{StaticResource ScrollBarPageButton}"
                                              Command="ScrollBar.PageUpCommand" />
                            </Track.DecreaseRepeatButton>
                            <Track.Thumb>
                                <Thumb Style="{StaticResource ScrollBarThumb}"
                                       Margin="1,0,1,0"
                                       Background="{StaticResource HorizontalNormalBrush}"
                                       BorderBrush="{StaticResource HorizontalNormalBorderBrush}" />
                            </Track.Thumb>
                            <Track.IncreaseRepeatButton>
                                <RepeatButton Style="{StaticResource ScrollBarPageButton}"
                                              Command="ScrollBar.PageDownCommand" />
                            </Track.IncreaseRepeatButton>
                        </Track>
                    <RepeatButton Grid.Row="3"
                                  Style="{StaticResource ScrollBarLineButton}"
                                  Height="18"
                                  Command="ScrollBar.LineDownCommand"
                                  Content="M 0 0 L 4 4 L 8 0 Z"/>
            </Grid>
        </ControlTemplate>
        <!--HorizontalScrollBar Template using the previously created Templates-->
        <ControlTemplate x:Key="HorizontalScrollBar" TargetType="{x:Type ScrollBar}">
            <Grid >
                <Grid.ColumnDefinitions>
                    <ColumnDefinition MaxWidth="18"/>
                    <ColumnDefinition Width="0.00001*"/>
                    <ColumnDefinition MaxWidth="18"/>
                </Grid.ColumnDefinitions>
                <Border Grid.ColumnSpan="3"
                        CornerRadius="2"
                        Background="#F0F0F0" />
                    <RepeatButton Grid.Column="0"
                                  Style="{StaticResource ScrollBarLineButton}"
                                  Width="18"
                                  Command="ScrollBar.LineLeftCommand"
                                  Content="M 4 0 L 4 8 L 0 4 Z" />
                        <Track Name="PART_Track"
                               Grid.Column="1"
                               IsDirectionReversed="False">
                            <Track.DecreaseRepeatButton>
                                <RepeatButton Style="{StaticResource ScrollBarPageButton}"
                                              Command="ScrollBar.PageLeftCommand" />
                            </Track.DecreaseRepeatButton>
                            <Track.Thumb>
                                <Thumb Style="{StaticResource ScrollBarThumb}"
                                        Margin="0,1,0,1"
                                        Background="{StaticResource NormalBrush}"
                                        BorderBrush="{StaticResource NormalBorderBrush}" />
                            </Track.Thumb>
                            <Track.IncreaseRepeatButton>
                                <RepeatButton Style="{StaticResource ScrollBarPageButton}"
                                              Command="ScrollBar.PageRightCommand" />
                            </Track.IncreaseRepeatButton>
                        </Track>
                        <RepeatButton Grid.Column="3"
                                      Style="{StaticResource ScrollBarLineButton}"
                                      Width="18"
                                      Command="ScrollBar.LineRightCommand"
                                      Content="M 0 0 L 4 4 L 0 8 Z"/>
            </Grid>
        </ControlTemplate>
        <!--Style for overall  ScrollBar-->
        <Style x:Key="{x:Type ScrollBar}" TargetType="{x:Type ScrollBar}">
            <Setter Property="SnapsToDevicePixels" Value="True"/>
            <Setter Property="OverridesDefaultStyle" Value="True"/>
            <Style.Triggers>
                <Trigger Property="Orientation" Value="Horizontal">
                    <Setter Property="Width" Value="Auto"/>
                    <Setter Property="Height" Value="18" />
                    <Setter Property="Template" Value="{StaticResource HorizontalScrollBar}" />
                </Trigger>
                <Trigger Property="Orientation" Value="Vertical">
                    <Setter Property="Width" Value="18"/>
                    <Setter Property="Height" Value="Auto" />
                    <Setter Property="Template" Value="{StaticResource VerticalScrollBar}" />
                </Trigger>
            </Style.Triggers>
        </Style>

        <!--Style for overall  ScrollViewer-->
        <Style x:Key="FavsScrollViewer" TargetType="{x:Type ScrollViewer}">
            <Setter Property="OverridesDefaultStyle" Value="True"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ScrollViewer}">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition/>
                                <ColumnDefinition Width="Auto"/>
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition/>
                                <RowDefinition Height="Auto"/>
                            </Grid.RowDefinitions>
                            <ScrollContentPresenter Grid.Column="1"/>
                            <ScrollBar Name="PART_VerticalScrollBar"
                                       Grid.Column="2"
                                       Value="{TemplateBinding VerticalOffset}"
                                       Maximum="{TemplateBinding ScrollableHeight}"
                                       ViewportSize="{TemplateBinding ViewportHeight}"
                                       Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/>
                            <ScrollBar Name="PART_HorizontalScrollBar"
                                       Orientation="Horizontal"
                                       Grid.Row="1"
                                       Grid.Column="1"
                                       Value="{TemplateBinding HorizontalOffset}"
                                       Maximum="{TemplateBinding ScrollableWidth}"
                                       ViewportSize="{TemplateBinding ViewportWidth}"
                                       Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/>
                         </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>



    </UserControl.Resources>
    <Grid Name="Grid1">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="79" />
            <ColumnDefinition Width="299*" />
            <ColumnDefinition Width="79" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="28" />
            <RowDefinition Height="22" Name="rowtoHide" />
        </Grid.RowDefinitions>
        <DockPanel Grid.Column="1" 
                   Name="dpSearchText"
                   Grid.Row="0" 
                   HorizontalAlignment="Stretch" 
                   Margin="0,0,0,0"  
                   VerticalAlignment="Stretch">
        <Label Name="lblSearch" 
               Content="Search:" 
               Margin="2,2"
               HorizontalAlignment="Stretch" 
               VerticalAlignment="Stretch"/>
        </DockPanel>
        <Button Style="{StaticResource GlassButton}"
                Name="btnSearch" 
                Width="75"
                Height="22"
                ContextMenuService.IsEnabled="False"
                Click="btnSearch_Click" >
            <Button.Content>
                <StackPanel Orientation="Horizontal"
                            Width="75"
                            Height="22"
                            VerticalAlignment="Center">
                    <TextBlock Text="Reset"
                               VerticalAlignment="Center"
                               TextAlignment="Center"
                               Width="45"/>
                    <Path x:Name="BtnArrow" 
                          Margin="4" 
                          VerticalAlignment="Center" 
                          Width="10" Fill="LimeGreen" 
                          Stretch="Uniform" 
                          Data="F1 M 301.14,-189.041L 311.57,-189.041L 306.355,-182.942L 301.14,-189.041 Z "/>
                </StackPanel>
            </Button.Content>
            <Button.ContextMenu>
                <ContextMenu >
                    <MenuItem Foreground="Snow" Header="Reset" Click="cmnuSearch_Reset_Click"/>
                    <MenuItem Foreground="Snow" Header="Refresh" Click="cmnuSearch_Refresh_Click"/>
                    <MenuItem Foreground="Snow" Header="Advanced" Click="cmnuSearch_Advanced_Click"/>
                </ContextMenu>
            </Button.ContextMenu>
        </Button>

        <Button Content="Refresh" 
                Style="{StaticResource GlassButton}"
                Grid.Column="2" 
                Grid.Row="0" 
                Width="75"
                Height="22" 
                Margin="2,2" 
                Name="btnRefresh" />
                <!--Visibility="{Binding Path=ShowRefresh,RelativeSource={RelativeSource AncestorType={x:Type WWSearchDataGrid:WWSearchDataGrid}}}"-->
        <ScrollViewer Grid.Row="1" 
                      Grid.ColumnSpan="3" 
                      HorizontalScrollBarVisibility="Hidden"
                      Name="svSearch"
                      Style="{StaticResource FavsScrollViewer}"
                      VerticalScrollBarVisibility="{Binding Path=ParentScrollBarVisibility
                                                           , Converter={StaticResource VisibilityConverter}
                                                           , RelativeSource={RelativeSource AncestorType={x:Type WPFSearchDataGrid:WPFSearchDataGrid}}}">
            <DataGrid AutoGenerateColumns="False" 
                  Grid.ColumnSpan="3" 
                  Grid.Row="1" 
                  Margin="0,0,0,0" 
                  Name="dgSearch" 
                  HeadersVisibility="Row" 
                  CanUserResizeRows="False" 
                  CanUserReorderColumns="False" 
                  CanUserSortColumns="False" 
                  SelectionUnit="CellOrRowHeader"
                  CanUserAddRows="False">
            </DataGrid>
        </ScrollViewer>
    </Grid>
</UserControl>
